package com.spn.blog.api.handler;

import com.spn.blog.common.vo.Result;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 对加了@Controller注解的方法进行拦截处理，AOP的实现
 */
@ControllerAdvice
public class AllExceptionHandler {
    /**
     * 进行异常处理，处理Exception.class的异常
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result doException(Exception e){
        //当出现异常的时候，前端也会正常获取Result（状态200），只不过这个时候的Result是我们动过手脚的。
        //不这么处理，出现异常的时候前端就会出现状态 500 等。
        e.printStackTrace();
        return Result.fail(-999, "服务端系统异常，请联系管理员。");
    }

    @ExceptionHandler(HttpMessageNotReadableException.class)
    @ResponseBody
    public Result doHttpMessageNotReadableException(HttpMessageNotReadableException e){
        e.printStackTrace();
        return Result.fail(-999, "前端传入的参数与后端不匹配");
    }

}
